home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / fsrmt / fsrmtOps.c < prev    next >
C/C++ Source or Header  |  1992-12-18  |  6KB  |  228 lines

  1. /* 
  2.  * fsRmtOps.c --
  3.  *
  4.  *    Routine for initializing the fsOpTable switch entries for remote
  5.  *    domain naming and remote file/pipe/device access.
  6.  *
  7.  * Copyright 1989 Regents of the University of California
  8.  * Permission to use, copy, modify, and distribute this
  9.  * software and its documentation for any purpose and without
  10.  * fee is hereby granted, provided that the above copyright
  11.  * notice appear in all copies.  The University of California
  12.  * makes no representations about the suitability of this
  13.  * software for any purpose.  It is provided "as is" without
  14.  * express or implied warranty.
  15.  */
  16.  
  17. #ifndef lint
  18. static char rcsid[] = "$Header: /cdrom/src/kernel/Cvsroot/kernel/fsrmt/fsrmtOps.c,v 9.5 92/10/26 14:09:59 mgbaker Exp $ SPRITE (Berkeley)";
  19. #endif /* not lint */
  20.  
  21. #include <sprite.h>
  22. #include <fs.h>
  23. #include <fsconsist.h>
  24. #include <fsio.h>
  25. #include <fsrmt.h>
  26. #include <fsioFile.h>
  27. #include <fsioDevice.h>
  28. #include <fsioPipe.h>
  29. #include <fsNameOps.h>
  30. #include <fsrmtInt.h>
  31.  
  32. /*
  33.  * fs_DomainLookup for FS_REMOTE_SPRITE_DOMAIN type.
  34.  */
  35.  
  36. static Fs_DomainLookupOps rmtDomainLookup = {
  37.      FsrmtImport, Fsio_NoProc, FsrmtOpen, FsrmtGetAttrPath,
  38.      FsrmtSetAttrPath, FsrmtMakeDevice, FsrmtMakeDir, 
  39.      FsrmtRemove, FsrmtRemoveDir, FsrmtRename, FsrmtHardLink
  40. };
  41.  
  42. /*
  43.  * Domain specific get/set attributes table.  These routines are used
  44.  * to get/set attributes on the name server given a fileID (not a pathname).
  45.  */
  46. static Fs_AttrOps rmtAttrOpTable =   { FsrmtGetAttr, FsrmtSetAttr };
  47.  
  48.  
  49. /*
  50.  * File stream type ops for FSIO_RMT_FILE_STREAM, FSIO_RMT_DEVICE_STREAM,
  51.  * and FSIO_RMT_PIPE_STREAM;
  52.  */
  53.  
  54. static Fsio_StreamTypeOps rmtFileStreamOps[] = {
  55. /*
  56.  * Remote file stream.  The file is at a remote server but blocks might 
  57.  * be cached in the block cache.
  58.  */
  59.     { FSIO_RMT_FILE_STREAM, FsrmtFileIoOpen, FsrmtFileRead, FsrmtFileWrite,
  60.         FsrmtFilePageRead, FsrmtFilePageWrite,
  61.         Fsrmt_BlockCopy,
  62.         FsrmtFileIOControl, Fsio_FileSelect,
  63.         FsrmtFileGetIOAttr, FsrmtFileSetIOAttr,
  64.         FsrmtFileVerify, FsrmtFileMigClose, FsrmtFileMigOpen,
  65.         FsrmtFileMigrate, FsrmtFileReopen,
  66.         FsrmtFileScavenge,
  67.         Fsio_NullClientKill, FsrmtFileClose},
  68. /*
  69.  * Remote device stream.  Forward the operations to the remote I/O server.
  70.  */
  71.     { FSIO_RMT_DEVICE_STREAM, FsrmtDeviceIoOpen, Fsrmt_Read, Fsrmt_Write,
  72.         Fsio_NoProc, Fsio_NoProc, Fsio_NoProc,     /* Paging routines */
  73.         Fsrmt_IOControl, Fsrmt_Select,
  74.         Fsrmt_GetIOAttr, Fsrmt_SetIOAttr,
  75.         FsrmtDeviceVerify, Fsrmt_IOMigClose, Fsrmt_IOMigOpen,
  76.         FsrmtDeviceMigrate, FsrmtDeviceReopen,
  77.         Fsutil_RemoteHandleScavenge, Fsio_NullClientKill, Fsrmt_IOClose},
  78.  /*
  79.   * Remote anonymous pipe stream.  These arise because of migration.
  80.   */
  81.     { FSIO_RMT_PIPE_STREAM, Fsio_NoProc, Fsrmt_Read, Fsrmt_Write,
  82.         Fsio_NoProc, Fsio_NoProc, Fsio_NoProc,     /* Paging routines */
  83.         Fsrmt_IOControl, Fsrmt_Select,
  84.         Fsrmt_GetIOAttr, Fsrmt_SetIOAttr,
  85.         FsrmtPipeVerify, Fsrmt_IOMigClose, Fsrmt_IOMigOpen,
  86.         FsrmtPipeMigrate, FsrmtPipeReopen,
  87.         Fsutil_RemoteHandleScavenge, Fsio_NullClientKill, Fsrmt_IOClose},
  88. };
  89.  
  90. static int numRmtFileStreamOps = sizeof(rmtFileStreamOps)/
  91.                  sizeof(rmtFileStreamOps[0]);
  92.  
  93. /*
  94.  *----------------------------------------------------------------------
  95.  *
  96.  * Fsrmt_InitializeOps --
  97.  *
  98.  *    Initialize the fsOpTable switch for the remote domain naming 
  99.  *    and remote domain streams.
  100.  *
  101.  * Results:
  102.  *    None.
  103.  *
  104.  * Side effects:
  105.  *    None.
  106.  *
  107.  *----------------------------------------------------------------------
  108.  */
  109.  
  110. void
  111. Fsrmt_InitializeOps()
  112. {
  113.     int    i;
  114.     Fsutil_BulkReopenOps    reopenOps;
  115.  
  116.     Fs_InstallDomainLookupOps(FS_REMOTE_SPRITE_DOMAIN, &rmtDomainLookup, 
  117.                 &rmtAttrOpTable );
  118.     for (i = 0; i < numRmtFileStreamOps; i++)  { 
  119.     Fsio_InstallStreamOps(rmtFileStreamOps[i].type, &(rmtFileStreamOps[i]));
  120.     }
  121.     reopenOps.setup = FsrmtSetupFileReopen;
  122.     reopenOps.finish = FsrmtFinishFileReopen;
  123.     Fsutil_InitBulkReopenOps(FSIO_RMT_FILE_STREAM, &reopenOps);
  124.     reopenOps.setup = FsrmtSetupDeviceReopen;
  125.     reopenOps.finish = FsrmtFinishDeviceReopen;
  126.     Fsutil_InitBulkReopenOps(FSIO_RMT_DEVICE_STREAM, &reopenOps);
  127.     reopenOps.setup = FsrmtSetupPipeReopen;
  128.     reopenOps.finish = FsrmtFinishPipeReopen;
  129.     Fsutil_InitBulkReopenOps(FSIO_RMT_PIPE_STREAM, &reopenOps);
  130.  
  131.     return;
  132. }
  133.  
  134. /*
  135.  *----------------------------------------------------------------------
  136.  *
  137.  * Fsrmt_Bin() --
  138.  *
  139.  *    Setup objects to be binned.
  140.  *
  141.  * Results:
  142.  *    None.
  143.  *
  144.  * Side effects:
  145.  *    None.
  146.  *
  147.  *----------------------------------------------------------------------
  148.  */
  149.  
  150. void
  151. Fsrmt_Bin()
  152. {
  153.     Mem_Bin(sizeof(Fsrmt_FileIOHandle));
  154. }
  155.  
  156.  
  157. /*
  158.  *----------------------------------------------------------------------
  159.  *
  160.  * Fsio_FileRecovTestUseCount --
  161.  *
  162.  *      For recovery testing, return the use count on the file's io handle.
  163.  *
  164.  * Results:
  165.  *      Use count.
  166.  *
  167.  * Side effects:
  168.  *      None.
  169.  *
  170.  *----------------------------------------------------------------------
  171.  */
  172. int
  173. Fsrmt_FileRecovTestUseCount(handlePtr)
  174.     Fsrmt_FileIOHandle   *handlePtr;
  175. {
  176.     return handlePtr->rmt.recovery.use.ref;
  177. }
  178.  
  179.  
  180. /*
  181.  *----------------------------------------------------------------------
  182.  *
  183.  * Fsio_FileRecovTestNumCacheBlocks --
  184.  *
  185.  *      For recovery testing, return the number of blocks in the cache
  186.  *      for this file.
  187.  *
  188.  * Results:
  189.  *      Number of blocks.
  190.  *
  191.  * Side effects:
  192.  *      None.
  193.  *
  194.  *----------------------------------------------------------------------
  195.  */
  196. int
  197. Fsrmt_FileRecovTestNumCacheBlocks(handlePtr)
  198.     Fsrmt_FileIOHandle   *handlePtr;
  199. {
  200.     return handlePtr->cacheInfo.blocksInCache;
  201. }
  202.  
  203.  
  204. /*
  205.  *----------------------------------------------------------------------
  206.  *
  207.  * Fsio_FileRecovTestNumDirtyCacheBlocks --
  208.  *
  209.  *      For recovery testing, return the number of dirty blocks in the cache
  210.  *      for this file.
  211.  *
  212.  * Results:
  213.  *      Number of dirty blocks.
  214.  *
  215.  * Side effects:
  216.  *      None.
  217.  *
  218.  *----------------------------------------------------------------------
  219.  */
  220. int
  221. Fsrmt_FileRecovTestNumDirtyCacheBlocks(handlePtr)
  222.     Fsrmt_FileIOHandle   *handlePtr;
  223. {
  224.     return handlePtr->cacheInfo.numDirtyBlocks;
  225. }
  226.  
  227.  
  228.